home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * (a) (C) 1990 by Adobe Systems Incorporated. All rights reserved.
- *
- * (b) If this Sample Code is distributed as part of the Display PostScript
- * System Software Development Kit from Adobe Systems Incorporated,
- * then this copy is designated as Development Software and its use is
- * subject to the terms of the License Agreement attached to such Kit.
- *
- * (c) If this Sample Code is distributed independently, then the following
- * terms apply:
- *
- * (d) This file may be freely copied and redistributed as long as:
- * 1) Parts (a), (d), (e) and (f) continue to be included in the file,
- * 2) If the file has been modified in any way, a notice of such
- * modification is conspicuously indicated.
- *
- * (e) PostScript, Display PostScript, and Adobe are registered trademarks of
- * Adobe Systems Incorporated.
- *
- * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
- * CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
- * AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
- * ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
- * OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
- * WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
- * WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
- * DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
- * OF THIRD PARTY RIGHTS.
- */
-
- /*
- * FormatApp.m
- *
- * This subclass of the application class performs the global
- * setup needed for the FormatExporter application. The drawing
- * window is created.
- *
- * Version: 2.0
- * Author: Ken Fromm
- * History:
- * 03-07-91 Added this comments.
- */
-
- #import "FormatApp.h"
- #import "DocView.h"
- #import "DrawingView.h"
- #import "DrawingViewWraps.h"
- #import "EpsfParser.h"
- #import <objc/hashtable.h> /* for NXCopyStringBuffer() */
- #import <appkit/Button.h>
- #import <appkit/Matrix.h>
- #import <appkit/OpenPanel.h>
- #import <appkit/ScrollView.h>
- #import <appkit/Window.h>
- #import <appkit/nextstd.h>
- #import <sys/param.h>
- #import <string.h>
-
- static NXRect windowRect = {150, 184, 550, 600};
-
- @implementation FormatApp
-
- /*
- * Allocate the memory for the user path description buffers. Create the
- * window for drawing the image.
- */
- + new
- {
- self = [super new];
-
- NX_MALLOC(drawBuffer.pts, float, PTS_UPATH_BUFFER);
- NX_MALLOC(drawBuffer.ops, char, OPS_UPATH_BUFFER);
-
- readerId = [EpsfParser new];
-
- [self createWindow:&windowRect];
-
- return self;
- }
-
- /*
- * Create the drawing window and place a scrollview as the content view.
- * A DrawingView instance is placed as the DocView of the ScrollView.
- */
- - createWindow:(NXRect *) winRect
- {
- NXRect tempRect;
-
- windowId = [Window newContent:winRect
- style:NX_TITLEDSTYLE
- backing:NX_RETAINED
- buttonMask:NX_RESIZEBUTTONMASK
- defer:NO];
-
- [Window getContentRect:&tempRect forFrameRect:winRect style:NX_TITLEDSTYLE];
- scrollviewId = [ScrollView newFrame:&tempRect];
- [scrollviewId setBorderType:SCROLLVIEW_BORDER];
-
- drawingviewId = [DrawingView newFrame:&tempRect];
- docviewId = [[[DocView new] setClipping:NO] setScale:1.0];
- [scrollviewId setDocView:docviewId];
- [[docviewId superview] setFlipped:NO];
- [docviewId addDrawView:drawingviewId];
-
- [[windowId setContentView:scrollviewId] free];
-
- [windowId makeFirstResponder:drawingviewId];
- [windowId setDelegate:self];
- [windowId display];
-
- return self;
- }
-
- /* The window will free the its subviews. */
- - free
- {
- if (drawBuffer.pts)
- NX_FREE(drawBuffer.pts);
- if (drawBuffer.ops)
- NX_FREE(drawBuffer.ops);
-
- [readerId free];
- [windowId free];
-
- return [super free];
- }
-
- - formatMatrix;
- {
- return formatmatrixId;
- }
-
- - setFormatMatrix:anObject;
- {
- formatmatrixId = anObject;
-
- return self;
- }
-
- - showWindow:sender
- {
- if (currentfile)
- [windowId makeKeyAndOrderFront:self];
-
- return self;
- }
-
- - getDrawingView
- {
- return drawingviewId;
- }
-
- - getDocument
- {
- return docviewId;
- }
-
- - (UPath *) getUpathBuffer
- {
- return &drawBuffer;
- }
-
- - save:sender
- {
- return [drawingviewId saveFile:sender];
- }
-
- /*
- * Called by pressing Load... in the Main menu.
- */
- - load:sender
- {
- id openpanelId, tempviewId;
-
- const char *file;
-
- static const char *const doctype[3] = {"ps", "eps", NULL};
-
- NXStream *stream;
-
- NXPoint viewPt, windowPt;
-
- NXRect epsfBounds, viewFrame;
-
- openpanelId = [[OpenPanel new] allowMultipleFiles:NO];
-
- if ([openpanelId runModalForTypes:doctype])
- {
- file = [openpanelId filename];
- if (!currentfile || strcmp(file, currentfile))
- {
- stream = NXMapFile(file, NX_READONLY);
- if (stream)
- {
- tempviewId = [View new];
- [windowId setContentView:tempviewId];
- [self setName:file withParsing:YES];
- [windowId display];
- [windowId makeKeyAndOrderFront:self];
- [[windowId setContentView:scrollviewId] free];
-
- if ([readerId readPSFromStream:stream])
- {
- [docviewId scaleView:drawingviewId withScale:1.0];
- [docviewId setScale:1.0];
-
- [readerId getBounds:&epsfBounds];
- [drawingviewId setDrawOrigin:&epsfBounds.origin];
- [drawingviewId sizeTo:epsfBounds.size.width :epsfBounds.size.height];
-
- [self setName:file withParsing:NO];
- if (currentfile)
- NX_FREE(currentfile);
- currentfile = NXCopyStringBuffer(file);
-
- [windowId disableDisplay];
- [docviewId placeView:drawingviewId];
-
- /* Scroll center of image to center of window. */
- [docviewId getFrame:&viewFrame];
- viewPt.x = viewFrame.size.width/2;
- viewPt.y = viewFrame.size.height/2;
- [drawingviewId convertPoint:&viewPt
- fromView:docviewId];
-
- [scrollviewId getFrame:&viewFrame];
- windowPt.x = viewFrame.size.width/2;
- windowPt.y = viewFrame.size.height/2;
- [scrollviewId convertPoint:&windowPt toView:nil];
-
- [docviewId scrollPoint:&viewPt
- inView:drawingviewId to:&windowPt];
- [windowId reenableDisplay];
- [windowId display];
- }
- else
- [self setName:currentfile withParsing:NO];
-
- NXCloseMemory(stream, NX_FREEBUFFER);
- }
- else
- NXRunAlertPanel("Load File", "Invalid File. Cannot open.",
- "OK", NULL, NULL);
- }
- }
-
- return self;
- }
-
- /*
- * Updates the name and directory of the document.
- */
- - setName:(const char *)filename withParsing:(BOOL) flag
- {
- int len = 0;
-
- char title[MAXPATHLEN+5];
-
- char *simple_filename;
-
- if (filename && *filename)
- {
- if (flag)
- strcpy(title, "parsing:");
- else
- title[0] = 0;
-
- simple_filename = strrchr(filename, '/');
- if (simple_filename)
- {
- len = strlen(simple_filename);
- simple_filename++;
- strcat(title, simple_filename);
- strcat(title, " \320 "); /* \320 is a "long dash" */
- strcatn(title, filename, strlen(filename) - len);
- }
- else
- strcat(title, filename);
-
- [windowId setTitle:title];
- }
-
- return self;
- }
-
- /*
- * Resizes the doc view and repositions the drawing view inside the doc view.
- */
- - windowDidResize:sender
- {
- [docviewId placeView:drawingviewId];
-
- return self;
- }
-
- @end
-
-